package net.qhzw.vip.qiyu.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.qhzw.vip.qiyu.dto.ProductDto;
import net.qhzw.vip.qiyu.dto.SearchProdDto;
import net.qhzw.vip.qiyu.dto.TagProductDto;
import net.qhzw.vip.qiyu.dto.ToExamineProduct;
import net.qhzw.vip.qiyu.entity.Product;
import net.qhzw.vip.qiyu.param.ProductParam;
import net.qhzw.vip.qiyu.util.PageAdapter;
import net.qhzw.vip.qiyu.util.PageParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface ProductMapper extends BaseMapper<Product> {

    int updateStocks(@Param("prod") Product product);

    Product getProductByProdNameAndShopId(@Param("prodName") String prodName, @Param("shopId") Long shopId);

    //void returnStock(@Param("prodCollect") Map<Long, Integer> prodCollect);
    void returnStock(@Param("prodId") Long prodId, @Param("stocks") int stocks);

    IPage<ProductDto> pageByPutawayTime(IPage<ProductDto> page);

    IPage<ProductDto> pageByTagId(Page<ProductDto> page, @Param("tagId") Long tagId);

    IPage<ProductDto> moreBuyProdList(Page<ProductDto> page);

    IPage<ProductDto> pageByCategoryId(Page<ProductDto> page, @Param("categoryId") Long categoryId);

    List<Product> listProdByCategoryId(@Param("categoryId") Long categoryId);

    IPage<SearchProdDto> getSearchProdDtoPageByProdName(Page page,
                                                        @Param("prodName") String prodName,
                                                        @Param("sort") Integer sort,
                                                        @Param("orderBy") Integer orderBy);

    TagProductDto tagProdList(@Param("tagId") Long tagId);

    List<TagProductDto> tagProdList();

    /**
     * 查看店铺的所有活动商品
     */
    IPage<ProductDto> listByShopId(@Param("page") PageParam<ProductDto> page, @Param("shopId") Long shopId);

    /**
     * 通过优惠券适用商品类型、优惠券id、店铺id获取商品列表
     */
    IPage<ProductDto> listBySuitableProdTypeAndCouponIdAndShopId(@Param("page") PageParam<ProductDto> page, @Param("shopId") Long shopId, @Param("suitableProdType") Integer suitableProdType, @Param("couponId") Long couponId);

    /**
     * 获取用户的收藏商品列表
     *
     * @param userId
     * @return
     */
    IPage<ProductDto> collectionProds(@Param("page") PageParam page, @Param("userId") Long userId);

    List<Product> prodListByTagId(@Param("tagId") Long tagId, @Param("size") Integer size);


    List<ToExamineProduct> listingProducts(@Param("page") PageAdapter page, @Param("prodName") String prodName);

    Long listingProductsToral(String prodName);


    /**
     * 产品查询
     * @param pageAdapter
     * @param product
     * @param shopId
     * @return
     */
    List<Product> selectByList(@Param("page") PageAdapter page, @Param("product") ProductParam product);


    Long selectByListTotal(@Param("product") ProductParam product);

    Product selectProductById(Long prodId);


}
